﻿using mozhi.smarterp.Finance.Enums;
using mozhi.smarterp.Finance.Querys;
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Volo.Abp.Domain.Repositories;

namespace mozhi.smarterp.Finance.Accounts.Repository
{
    public interface IAccountRepository : IRepository<Account, Guid>
    {
        Task<List<Account>> GetDefaultAccountsAsync(AccountingStandardType accountingStandard, CancellationToken cancellationToken = default(CancellationToken));

        Task<int> GetCountAsync(string keyword, string code, string name, AccountingStandardType? standardType, Guid? excludeId, Guid? parentId, CancellationToken cancellationToken = default(CancellationToken));

        Task<List<Account>> GetPageListAsync(string keyword, string code, string name, AccountingStandardType? standardType, Guid? excludeId, Guid? parentId, int skipCount, int maxResultCount, string sorting, bool includeDetails = false, CancellationToken cancellationToken = default(CancellationToken));

        Task<List<Account>> GetAccountIncludeParentAsync(Guid id, bool includeDetails = false , CancellationToken cancellationToken = default(CancellationToken));

        Task<List<Account>> GetAccountIncludeChildrenAsync(Guid id, bool includeDetails = false , CancellationToken cancellationToken = default(CancellationToken));
    }
}
